#include <sstream>
#include <string.h>
#include <stdlib.h>
#include "sdp.h"
#define SDP_DEBUG

SDPParse::SDPParse(std::string sdp, std::string base_url){
    // 初始化 sdp 和 base_url 成员变量
    sdp_ = sdp;
    base_url_ = base_url;
    // 查找第一个 "m=" 的位置，用于分割会话描述和媒体描述
    int pos = sdp_.find("m=");
    if(pos != std::string::npos){
        // 找到了 "m="，将会话描述截取为 sdp_ 字符串从开始到 "m=" 之前的部分
        sdp_session_ = sdp_.substr(0, pos);
    }
    else{
        // 没有找到 "m="，则整个 sdp_ 都作为会话描述
        sdp_session_ = sdp_;
    }
    // 遍历所有的媒体描述部分
    while ((pos = sdp_.find("m=", pos)) != std::string::npos) {
        // 找到下一个 "m=" 来确定当前媒体描述的结束位置
        size_t next_pos = sdp_.find("m=", pos + 1);
        std::string media_block;
        if (next_pos != std::string::npos) {
            // 如果找到了下一个 "m="，则当前媒体块从当前位置截取到下一个 "m=" 之前
            media_block = sdp_.substr(pos, next_pos - pos);
        } else {
            // 如果未找到下一个 "m="，则当前媒体块从当前位置截取到字符串结尾
            media_block = sdp_.substr(pos);
        }
        // 将解析的媒体描述块添加到媒体描述列表中
        media_descriptions_.push_back(media_block);
        // 如果媒体块中包含 "video"，则认为它是视频描述，并保存到 sdp_video_
        if(media_block.find("video") != std::string::npos){
            sdp_video_ = media_block;
        }
        // 如果媒体块中包含 "audio"，则认为它是音频描述，并保存到 sdp_audio_
        if(media_block.find("audio") != std::string::npos){
            sdp_audio_ = media_block;
        }
        // 更新 pos 为下一个 "m=" 的位置，继续解析
        pos = next_pos;
    }
}

SDPParse::~SDPParse(){}